package org.atlantis.grosbeak.cable.meta;

import javax.servlet.ServletContext;

/**
 * ServletContext对象的封装接口。
 * 
 * @author <a href="mailto:seenoevil.cn@gmail.com">SeeNoEvil</a>
 * 
 */
public interface ApplicationAware {

	/**
	 * 相当于{@link ServletContext#setAttribute(String, Object)}。
	 * 
	 * @param key
	 * @param value
	 */
	void setAttr(String key, Object value);

	/**
	 * 相当于{@link ServletContext#getAttribute(String)}。
	 * 
	 * @param key
	 * @return
	 */
	Object getAttr(String key);

	/**
	 * 相当于{@link ServletContext#getAttribute(String)}。但是会把得到的 结果根据转换器进行类型转换。
	 * 
	 * @param <T>
	 * @param type
	 * @param key
	 * @return
	 */
	<T> T getAttr(Class<T> type, String key);

	/**
	 * 得到当前的ServletContext对象
	 * 
	 * @return
	 */
	ServletContext getSelf();
}
